Presetting for figures and knit options

Methods

Packages & Data

Packages

library(tidyverse)
library(easystats)
library(lavaan)

set.seed(333)

Data

# Read STATA data
data <- haven::read_dta("Dataset/LVM54.dta") |> 
  mutate(sex = as.factor(sex))  # male is 0, female is 1

# Define variable labels from STATA data
var_labels <- data.frame("name" = names(data),
                         "label" = sapply(data, function(x) attr(x, "label"))  |> as.character())

Descriptive

data |> 
  mutate(sex = ifelse(sex == 0, "M", "F")) |> 
  report::report_participants()
> [1] "300 participants (50.0% females)"
# "300 participants (50.0% females)"

# Describe categorical variable
data |> 
  select(sex) |> 
  ggplot(aes(x = sex)) +
  geom_bar(fill = "#2196F3") +
  ggtitle("Distribution of Gender") +
  ylab("") +
  scale_x_discrete(labels = c("Males", "Females")) +
  see::theme_modern()

# Check for MVN assumption and skewness for all variables
data |> 
  select(-sex) |>
  MVN::mvn(mvnTest = "dh", 
           univariateTest = "SW",
           univariatePlot = "histogram")  # method is Doornik-Hansen
> $multivariateNormality
>             Test   E df  p value MVN
> 1 Doornik-Hansen 922 22 9.4e-181  NO
> 
> $univariateNormality
>            Test  Variable Statistic   p value Normality
> 1  Shapiro-Wilk   perf1        1.00  0.5445      YES   
> 2  Shapiro-Wilk   perf2        1.00  0.7096      YES   
> 3  Shapiro-Wilk   perf3        1.00  0.8266      YES   
> 4  Shapiro-Wilk   perf4        0.99  0.1393      YES   
> 5  Shapiro-Wilk   perf5        1.00  0.5048      YES   
> 6  Shapiro-Wilk  emreg1        1.00  0.4532      YES   
> 7  Shapiro-Wilk  emreg2        1.00  0.8704      YES   
> 8  Shapiro-Wilk  emreg3        1.00  0.9438      YES   
> 9  Shapiro-Wilk  emreg4        1.00   0.629      YES   
> 10 Shapiro-Wilk  emreg5        1.00   0.876      YES   
> 11 Shapiro-Wilk  edscore       0.96  <0.001      NO    
> 
> $Descriptives
>           n Mean Std.Dev Median  Min Max 25th 75th     Skew Kurtosis
> perf1   300   40     4.0     40 30.4  51   37   43  0.10569   -0.243
> perf2   300   40     4.0     40 27.0  50   38   43 -0.08425   -0.022
> perf3   300   40     4.1     40 28.1  55   37   43  0.01226    0.184
> perf4   300   40     3.9     40 27.9  51   38   43 -0.30825    0.189
> perf5   300   40     4.2     40 30.3  53   37   43  0.14315   -0.341
> emreg1  300   40     4.0     40 26.7  50   37   43 -0.00084    0.042
> emreg2  300   40     3.8     40 28.4  50   37   43  0.02994   -0.283
> emreg3  300   40     3.9     40 30.0  52   37   43  0.08401   -0.296
> emreg4  300   40     3.9     40 28.5  50   37   43 -0.00892   -0.073
> emreg5  300   40     3.9     40 28.4  51   37   43 -0.07424   -0.093
> edscore 300   30    12.7     31 -1.7  53   20   40 -0.35324   -0.827

# Check for MVN assumption and skewness for all variables but ED
data |> 
  select(-sex, -edscore) |>
  MVN::mvn(mvnTest = "dh", 
           univariateTest = "SW")
> $multivariateNormality
>             Test  E df p value MVN
> 1 Doornik-Hansen 18 20    0.57 YES
> 
> $univariateNormality
>            Test  Variable Statistic   p value Normality
> 1  Shapiro-Wilk   perf1        1.00      0.54    YES   
> 2  Shapiro-Wilk   perf2        1.00      0.71    YES   
> 3  Shapiro-Wilk   perf3        1.00      0.83    YES   
> 4  Shapiro-Wilk   perf4        0.99      0.14    YES   
> 5  Shapiro-Wilk   perf5        1.00      0.50    YES   
> 6  Shapiro-Wilk  emreg1        1.00      0.45    YES   
> 7  Shapiro-Wilk  emreg2        1.00      0.87    YES   
> 8  Shapiro-Wilk  emreg3        1.00      0.94    YES   
> 9  Shapiro-Wilk  emreg4        1.00      0.63    YES   
> 10 Shapiro-Wilk  emreg5        1.00      0.88    YES   
> 
> $Descriptives
>          n Mean Std.Dev Median Min Max 25th 75th     Skew Kurtosis
> perf1  300   40     4.0     40  30  51   37   43  0.10569   -0.243
> perf2  300   40     4.0     40  27  50   38   43 -0.08425   -0.022
> perf3  300   40     4.1     40  28  55   37   43  0.01226    0.184
> perf4  300   40     3.9     40  28  51   38   43 -0.30825    0.189
> perf5  300   40     4.2     40  30  53   37   43  0.14315   -0.341
> emreg1 300   40     4.0     40  27  50   37   43 -0.00084    0.042
> emreg2 300   40     3.8     40  28  50   37   43  0.02994   -0.283
> emreg3 300   40     3.9     40  30  52   37   43  0.08401   -0.296
> emreg4 300   40     3.9     40  28  50   37   43 -0.00892   -0.073
> emreg5 300   40     3.9     40  28  51   37   43 -0.07424   -0.093

Question 1 and 2

# covariance structure between perf items
cor_perf <- data |> 
  select(starts_with("perf")) |> 
  correlation::correlation()
cor_perf
Parameter1 Parameter2 r CI CI_low CI_high t df_error p Method n_Obs
perf1 perf2 0.66 0.95 0.59 0.72 15 298 0 Pearson correlation 300
perf1 perf3 0.68 0.95 0.62 0.74 16 298 0 Pearson correlation 300
perf1 perf4 0.66 0.95 0.59 0.72 15 298 0 Pearson correlation 300
perf1 perf5 0.66 0.95 0.59 0.72 15 298 0 Pearson correlation 300
perf2 perf3 0.71 0.95 0.65 0.76 18 298 0 Pearson correlation 300
perf2 perf4 0.66 0.95 0.59 0.72 15 298 0 Pearson correlation 300
perf2 perf5 0.66 0.95 0.59 0.72 15 298 0 Pearson correlation 300
perf3 perf4 0.64 0.95 0.57 0.71 14 298 0 Pearson correlation 300
perf3 perf5 0.68 0.95 0.61 0.74 16 298 0 Pearson correlation 300
perf4 perf5 0.65 0.95 0.58 0.71 15 298 0 Pearson correlation 300
# covariance structure between emreg items
cor_emreg <- data |> 
  select(starts_with("emreg")) |> 
  correlation::correlation()
cor_emreg
Parameter1 Parameter2 r CI CI_low CI_high t df_error p Method n_Obs
emreg1 emreg2 0.70 0.95 0.64 0.76 17 298 0 Pearson correlation 300
emreg1 emreg3 0.68 0.95 0.61 0.74 16 298 0 Pearson correlation 300
emreg1 emreg4 0.69 0.95 0.62 0.74 16 298 0 Pearson correlation 300
emreg1 emreg5 0.69 0.95 0.63 0.75 17 298 0 Pearson correlation 300
emreg2 emreg3 0.73 0.95 0.67 0.78 18 298 0 Pearson correlation 300
emreg2 emreg4 0.68 0.95 0.62 0.74 16 298 0 Pearson correlation 300
emreg2 emreg5 0.73 0.95 0.68 0.78 19 298 0 Pearson correlation 300
emreg3 emreg4 0.68 0.95 0.62 0.74 16 298 0 Pearson correlation 300
emreg3 emreg5 0.70 0.95 0.63 0.75 17 298 0 Pearson correlation 300
emreg4 emreg5 0.73 0.95 0.67 0.78 19 298 0 Pearson correlation 300
cor_table <- rbind(cor_perf, cor_emreg)
# Save corr table
# cor_table |>
#   as.data.frame() |>
#   mutate_if(is.numeric, round, digits = 2) |>
#   mutate("95% CI" = paste0("[", CI_low, ",", CI_high, "]")) |> 
#   mutate(p = "< .001***") |> 
#   select(Parameter1, Parameter2, r, "95% CI", p) |> 
#   write.csv("figures/cor_table.csv", row.names = FALSE)

# measurement model
model_measurement <- "
# Measurement model
perfectionism =~ perf1 + perf2 + perf3 + perf4 + perf5
em_regulation =~ emreg1 + emreg2 + emreg3 + emreg4 + emreg5
"

fit_measurement <- sem(model_measurement, data = data)
sem_measurement <- summary(fit_measurement, fit.measures = TRUE, standardized = TRUE)
> lavaan 0.6-11 ended normally after 43 iterations
> 
>   Estimator                                         ML
>   Optimization method                           NLMINB
>   Number of model parameters                        21
>                                                       
>   Number of observations                           300
>                                                       
> Model Test User Model:
>                                                       
>   Test statistic                                34.784
>   Degrees of freedom                                34
>   P-value (Chi-square)                           0.430
> 
> Model Test Baseline Model:
> 
>   Test statistic                              2069.031
>   Degrees of freedom                                45
>   P-value                                        0.000
> 
> User Model versus Baseline Model:
> 
>   Comparative Fit Index (CFI)                    1.000
>   Tucker-Lewis Index (TLI)                       0.999
> 
> Loglikelihood and Information Criteria:
> 
>   Loglikelihood user model (H0)              -7379.478
>   Loglikelihood unrestricted model (H1)      -7362.086
>                                                       
>   Akaike (AIC)                               14800.956
>   Bayesian (BIC)                             14878.736
>   Sample-size adjusted Bayesian (BIC)        14812.136
> 
> Root Mean Square Error of Approximation:
> 
>   RMSEA                                          0.009
>   90 Percent confidence interval - lower         0.000
>   90 Percent confidence interval - upper         0.043
>   P-value RMSEA <= 0.05                          0.984
> 
> Standardized Root Mean Square Residual:
> 
>   SRMR                                           0.026
> 
> Parameter Estimates:
> 
>   Standard errors                             Standard
>   Information                                 Expected
>   Information saturated (h1) model          Structured
> 
> Latent Variables:
>                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
>   perfectionism =~                                                      
>     perf1             1.000                               3.281    0.811
>     perf2             1.012    0.062   16.254    0.000    3.321    0.828
>     perf3             1.054    0.064   16.520    0.000    3.459    0.838
>     perf4             0.956    0.062   15.418    0.000    3.135    0.796
>     perf5             1.039    0.066   15.746    0.000    3.409    0.809
>   em_regulation =~                                                      
>     emreg1            1.000                               3.247    0.820
>     emreg2            1.013    0.057   17.638    0.000    3.288    0.857
>     emreg3            0.982    0.059   16.758    0.000    3.188    0.827
>     emreg4            1.003    0.060   16.788    0.000    3.255    0.828
>     emreg5            1.017    0.057   17.692    0.000    3.301    0.858
> 
> Covariances:
>                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
>   perfectionism ~~                                                      
>     em_regulation    -4.425    0.760   -5.826    0.000   -0.415   -0.415
> 
> Variances:
>                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
>    .perf1             5.581    0.564    9.892    0.000    5.581    0.341
>    .perf2             5.060    0.528    9.579    0.000    5.060    0.314
>    .perf3             5.072    0.542    9.357    0.000    5.072    0.298
>    .perf4             5.680    0.560   10.139    0.000    5.680    0.366
>    .perf5             6.151    0.619    9.941    0.000    6.151    0.346
>    .emreg1            5.124    0.506   10.123    0.000    5.124    0.327
>    .emreg2            3.926    0.418    9.389    0.000    3.926    0.266
>    .emreg3            4.699    0.469   10.012    0.000    4.699    0.316
>    .emreg4            4.861    0.486    9.994    0.000    4.861    0.315
>    .emreg5            3.894    0.417    9.343    0.000    3.894    0.263
>     perfectionism    10.762    1.298    8.294    0.000    1.000    1.000
>     em_regulation    10.541    1.242    8.489    0.000    1.000    1.000
as.data.frame(t(as.data.frame(sem_measurement$FIT))) |> 
  select(chisq, df, pvalue, cfi, rmsea, rmsea.pvalue, srmr, aic, bic)
chisq df pvalue cfi rmsea rmsea.pvalue srmr aic bic
sem_measurement$FIT 35 34 0.43 1 0.01 0.98 0.03 14801 14879

Question 3

# SEM model
model <- "
# Measurement model
perfectionism =~ perf1 + perf2 + perf3 + perf4 + perf5
em_regulation =~ emreg1 + emreg2 + emreg3 + emreg4 + emreg5

# Structural model
## Regressions
perfectionism ~ edscore
em_regulation ~ edscore
"

fit_model <- sem(model, data = data, se = "robust")
summary(fit_model, fit.measures = TRUE, standardized = TRUE)
> lavaan 0.6-11 ended normally after 51 iterations
> 
>   Estimator                                         ML
>   Optimization method                           NLMINB
>   Number of model parameters                        23
>                                                       
>   Number of observations                           300
>                                                       
> Model Test User Model:
>                                                       
>   Test statistic                                43.689
>   Degrees of freedom                                42
>   P-value (Chi-square)                           0.400
> 
> Model Test Baseline Model:
> 
>   Test statistic                              2106.165
>   Degrees of freedom                                55
>   P-value                                        0.000
> 
> User Model versus Baseline Model:
> 
>   Comparative Fit Index (CFI)                    0.999
>   Tucker-Lewis Index (TLI)                       0.999
> 
> Loglikelihood and Information Criteria:
> 
>   Loglikelihood user model (H0)              -7365.364
>   Loglikelihood unrestricted model (H1)      -7343.520
>                                                       
>   Akaike (AIC)                               14776.729
>   Bayesian (BIC)                             14861.916
>   Sample-size adjusted Bayesian (BIC)        14788.973
> 
> Root Mean Square Error of Approximation:
> 
>   RMSEA                                          0.012
>   90 Percent confidence interval - lower         0.000
>   90 Percent confidence interval - upper         0.041
>   P-value RMSEA <= 0.05                          0.990
> 
> Standardized Root Mean Square Residual:
> 
>   SRMR                                           0.026
> 
> Parameter Estimates:
> 
>   Standard errors                           Robust.sem
>   Information                                 Expected
>   Information saturated (h1) model          Structured
> 
> Latent Variables:
>                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
>   perfectionism =~                                                      
>     perf1             1.000                               3.270    0.809
>     perf2             1.018    0.062   16.353    0.000    3.327    0.829
>     perf3             1.058    0.068   15.526    0.000    3.459    0.838
>     perf4             0.958    0.061   15.661    0.000    3.131    0.795
>     perf5             1.045    0.059   17.717    0.000    3.417    0.811
>   em_regulation =~                                                      
>     emreg1            1.000                               3.247    0.820
>     emreg2            1.012    0.054   18.616    0.000    3.288    0.856
>     emreg3            0.982    0.057   17.269    0.000    3.189    0.827
>     emreg4            1.002    0.062   16.215    0.000    3.254    0.828
>     emreg5            1.016    0.058   17.671    0.000    3.300    0.858
> 
> Regressions:
>                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
>   perfectionism ~                                                       
>     edscore           0.079    0.016    5.068    0.000    0.024    0.307
>   em_regulation ~                                                       
>     edscore          -0.046    0.017   -2.683    0.007   -0.014   -0.178
> 
> Covariances:
>                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
>  .perfectionism ~~                                                      
>    .em_regulation    -3.833    0.705   -5.437    0.000   -0.385   -0.385
> 
> Variances:
>                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
>    .perf1             5.652    0.578    9.772    0.000    5.652    0.346
>    .perf2             5.019    0.492   10.196    0.000    5.019    0.312
>    .perf3             5.073    0.537    9.443    0.000    5.073    0.298
>    .perf4             5.705    0.577    9.892    0.000    5.705    0.368
>    .perf5             6.095    0.656    9.295    0.000    6.095    0.343
>    .emreg1            5.121    0.565    9.066    0.000    5.121    0.327
>    .emreg2            3.927    0.385   10.190    0.000    3.927    0.267
>    .emreg3            4.689    0.498    9.412    0.000    4.689    0.316
>    .emreg4            4.868    0.554    8.791    0.000    4.868    0.315
>    .emreg5            3.898    0.446    8.746    0.000    3.898    0.264
>    .perfectionism     9.682    1.176    8.230    0.000    0.906    0.906
>    .em_regulation    10.211    1.204    8.480    0.000    0.968    0.968
# 
# semTable::semTable(fit_model, type = "html", file = "figures/sem2")

Question 4

Measurement invariance testing

fit_model_group1 <- sem(model, data = data, se = "robust", group = "sex")
summary(fit_model_group1, fit.measures = TRUE, standardized = TRUE)
> lavaan 0.6-11 ended normally after 178 iterations
> 
>   Estimator                                         ML
>   Optimization method                           NLMINB
>   Number of model parameters                        66
>                                                       
>   Number of observations per group:                   
>     0                                              150
>     1                                              150
>                                                       
> Model Test User Model:
>                                                       
>   Test statistic                                74.075
>   Degrees of freedom                                84
>   P-value (Chi-square)                           0.772
>   Test statistic for each group:
>     0                                           40.021
>     1                                           34.054
> 
> Model Test Baseline Model:
> 
>   Test statistic                              2330.188
>   Degrees of freedom                               110
>   P-value                                        0.000
> 
> User Model versus Baseline Model:
> 
>   Comparative Fit Index (CFI)                    1.000
>   Tucker-Lewis Index (TLI)                       1.006
> 
> Loglikelihood and Information Criteria:
> 
>   Loglikelihood user model (H0)              -7253.516
>   Loglikelihood unrestricted model (H1)      -7216.479
>                                                       
>   Akaike (AIC)                               14639.033
>   Bayesian (BIC)                             14883.482
>   Sample-size adjusted Bayesian (BIC)        14674.169
> 
> Root Mean Square Error of Approximation:
> 
>   RMSEA                                          0.000
>   90 Percent confidence interval - lower         0.000
>   90 Percent confidence interval - upper         0.032
>   P-value RMSEA <= 0.05                          0.997
> 
> Standardized Root Mean Square Residual:
> 
>   SRMR                                           0.028
> 
> Parameter Estimates:
> 
>   Standard errors                           Robust.sem
>   Information                                 Expected
>   Information saturated (h1) model          Structured
> 
> 
> Group 1 [0]:
> 
> Latent Variables:
>                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
>   perfectionism =~                                                      
>     perf1             1.000                               3.258    0.790
>     perf2             0.971    0.079   12.347    0.000    3.162    0.809
>     perf3             1.090    0.102   10.698    0.000    3.553    0.854
>     perf4             0.900    0.083   10.795    0.000    2.933    0.798
>     perf5             1.033    0.092   11.290    0.000    3.367    0.794
>   em_regulation =~                                                      
>     emreg1            1.000                               3.017    0.811
>     emreg2            1.031    0.081   12.742    0.000    3.109    0.842
>     emreg3            0.921    0.078   11.822    0.000    2.777    0.755
>     emreg4            1.046    0.088   11.850    0.000    3.155    0.835
>     emreg5            1.125    0.086   13.094    0.000    3.394    0.873
> 
> Regressions:
>                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
>   perfectionism ~                                                       
>     edscore          -0.134    0.053   -2.553    0.011   -0.041   -0.237
>   em_regulation ~                                                       
>     edscore           0.299    0.039    7.667    0.000    0.099    0.571
> 
> Covariances:
>                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
>  .perfectionism ~~                                                      
>    .em_regulation    -2.966    0.744   -3.986    0.000   -0.378   -0.378
> 
> Intercepts:
>                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
>    .perf1            45.717    2.110   21.663    0.000   45.717   11.092
>    .perf2            46.036    1.948   23.634    0.000   46.036   11.773
>    .perf3            46.311    2.138   21.662    0.000   46.311   11.137
>    .perf4            45.245    1.809   25.007    0.000   45.245   12.315
>    .perf5            46.417    2.097   22.137    0.000   46.417   10.941
>    .emreg1           28.010    1.553   18.032    0.000   28.010    7.528
>    .emreg2           27.558    1.552   17.754    0.000   27.558    7.459
>    .emreg3           28.894    1.484   19.475    0.000   28.894    7.851
>    .emreg4           27.450    1.704   16.108    0.000   27.450    7.261
>    .emreg5           26.292    1.733   15.173    0.000   26.292    6.762
>    .perfectionism     0.000                               0.000    0.000
>    .em_regulation     0.000                               0.000    0.000
> 
> Variances:
>                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
>    .perf1             6.373    0.990    6.437    0.000    6.373    0.375
>    .perf2             5.290    0.736    7.192    0.000    5.290    0.346
>    .perf3             4.670    0.746    6.262    0.000    4.670    0.270
>    .perf4             4.894    0.610    8.022    0.000    4.894    0.363
>    .perf5             6.666    1.040    6.410    0.000    6.666    0.370
>    .emreg1            4.744    0.768    6.176    0.000    4.744    0.343
>    .emreg2            3.981    0.569    6.993    0.000    3.981    0.292
>    .emreg3            5.831    0.773    7.548    0.000    5.831    0.431
>    .emreg4            4.339    0.776    5.591    0.000    4.339    0.304
>    .emreg5            3.599    0.546    6.592    0.000    3.599    0.238
>    .perfectionism    10.016    1.707    5.869    0.000    0.944    0.944
>    .em_regulation     6.130    0.934    6.566    0.000    0.674    0.674
> 
> 
> Group 2 [1]:
> 
> Latent Variables:
>                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
>   perfectionism =~                                                      
>     perf1             1.000                               3.277    0.829
>     perf2             1.038    0.091   11.382    0.000    3.403    0.838
>     perf3             1.030    0.096   10.749    0.000    3.374    0.829
>     perf4             1.013    0.089   11.439    0.000    3.321    0.796
>     perf5             1.029    0.073   14.136    0.000    3.373    0.824
>   em_regulation =~                                                      
>     emreg1            1.000                               3.421    0.822
>     emreg2            1.005    0.072   14.046    0.000    3.438    0.868
>     emreg3            1.042    0.085   12.296    0.000    3.565    0.891
>     emreg4            0.972    0.084   11.555    0.000    3.324    0.818
>     emreg5            0.934    0.074   12.646    0.000    3.195    0.848
> 
> Regressions:
>                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
>   perfectionism ~                                                       
>     edscore           0.275    0.023   12.018    0.000    0.084    0.758
>   em_regulation ~                                                       
>     edscore          -0.238    0.031   -7.719    0.000   -0.070   -0.628
> 
> Covariances:
>                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
>  .perfectionism ~~                                                      
>    .em_regulation     0.993    0.516    1.925    0.054    0.175    0.175
> 
> Intercepts:
>                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
>    .perf1            34.700    0.482   71.941    0.000   34.700    8.775
>    .perf2            34.432    0.602   57.204    0.000   34.432    8.477
>    .perf3            34.320    0.533   64.430    0.000   34.320    8.434
>    .perf4            34.547    0.657   52.596    0.000   34.547    8.281
>    .perf5            34.152    0.492   69.371    0.000   34.152    8.343
>    .emreg1           45.119    0.648   69.629    0.000   45.119   10.846
>    .emreg2           44.950    0.644   69.782    0.000   44.950   11.344
>    .emreg3           45.204    0.608   74.382    0.000   45.204   11.293
>    .emreg4           44.821    0.646   69.374    0.000   44.821   11.028
>    .emreg5           44.719    0.605   73.943    0.000   44.719   11.871
>    .perfectionism     0.000                               0.000    0.000
>    .em_regulation     0.000                               0.000    0.000
> 
> Variances:
>                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
>    .perf1             4.900    0.620    7.907    0.000    4.900    0.313
>    .perf2             4.920    0.635    7.747    0.000    4.920    0.298
>    .perf3             5.175    0.758    6.828    0.000    5.175    0.313
>    .perf4             6.377    0.978    6.522    0.000    6.377    0.366
>    .perf5             5.377    0.800    6.725    0.000    5.377    0.321
>    .emreg1            5.601    0.826    6.777    0.000    5.601    0.324
>    .emreg2            3.880    0.513    7.557    0.000    3.880    0.247
>    .emreg3            3.311    0.522    6.339    0.000    3.311    0.207
>    .emreg4            5.469    0.774    7.062    0.000    5.469    0.331
>    .emreg5            3.982    0.630    6.323    0.000    3.982    0.281
>    .perfectionism     4.565    0.713    6.398    0.000    0.425    0.425
>    .em_regulation     7.090    1.179    6.014    0.000    0.606    0.606
m1 <- fitMeasures(fit_model_group1)[names = c("cfi", "tli")]
fit_model_group2 <- sem(model, data = data, se = "robust", group = "sex",
                       group.equal = c("loadings"))
summary(fit_model_group2, fit.measures = TRUE, standardized = TRUE)
> lavaan 0.6-11 ended normally after 180 iterations
> 
>   Estimator                                         ML
>   Optimization method                           NLMINB
>   Number of model parameters                        66
>   Number of equality constraints                     8
>                                                       
>   Number of observations per group:                   
>     0                                              150
>     1                                              150
>                                                       
> Model Test User Model:
>                                                       
>   Test statistic                                84.539
>   Degrees of freedom                                92
>   P-value (Chi-square)                           0.697
>   Test statistic for each group:
>     0                                           46.101
>     1                                           38.438
> 
> Model Test Baseline Model:
> 
>   Test statistic                              2330.188
>   Degrees of freedom                               110
>   P-value                                        0.000
> 
> User Model versus Baseline Model:
> 
>   Comparative Fit Index (CFI)                    1.000
>   Tucker-Lewis Index (TLI)                       1.004
> 
> Loglikelihood and Information Criteria:
> 
>   Loglikelihood user model (H0)              -7258.748
>   Loglikelihood unrestricted model (H1)      -7216.479
>                                                       
>   Akaike (AIC)                               14633.497
>   Bayesian (BIC)                             14848.316
>   Sample-size adjusted Bayesian (BIC)        14664.375
> 
> Root Mean Square Error of Approximation:
> 
>   RMSEA                                          0.000
>   90 Percent confidence interval - lower         0.000
>   90 Percent confidence interval - upper         0.035
>   P-value RMSEA <= 0.05                          0.995
> 
> Standardized Root Mean Square Residual:
> 
>   SRMR                                           0.041
> 
> Parameter Estimates:
> 
>   Standard errors                           Robust.sem
>   Information                                 Expected
>   Information saturated (h1) model          Structured
> 
> 
> Group 1 [0]:
> 
> Latent Variables:
>                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
>   perfectionism =~                                                      
>     perf1             1.000                               3.218    0.786
>     perf2   (.p2.)    1.008    0.061   16.421    0.000    3.245    0.818
>     perf3   (.p3.)    1.061    0.070   15.196    0.000    3.415    0.840
>     perf4   (.p4.)    0.953    0.061   15.530    0.000    3.067    0.814
>     perf5   (.p5.)    1.032    0.057   17.969    0.000    3.321    0.789
>   em_regulation =~                                                      
>     emreg1            1.000                               3.083    0.819
>     emreg2  (.p7.)    1.016    0.054   18.902    0.000    3.133    0.845
>     emreg3  (.p8.)    1.006    0.058   17.453    0.000    3.101    0.793
>     emreg4  (.p9.)    1.006    0.061   16.490    0.000    3.103    0.829
>     emreg5  (.10.)    1.016    0.057   17.907    0.000    3.132    0.845
> 
> Regressions:
>                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
>   perfectionism ~                                                       
>     edscore          -0.134    0.051   -2.630    0.009   -0.042   -0.239
>   em_regulation ~                                                       
>     edscore           0.306    0.038    8.002    0.000    0.099    0.572
> 
> Covariances:
>                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
>  .perfectionism ~~                                                      
>    .em_regulation    -2.970    0.712   -4.170    0.000   -0.376   -0.376
> 
> Intercepts:
>                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
>    .perf1            45.687    2.038   22.418    0.000   45.687   11.158
>    .perf2            46.207    1.996   23.151    0.000   46.207   11.645
>    .perf3            46.122    2.078   22.195    0.000   46.122   11.347
>    .perf4            45.497    1.882   24.172    0.000   45.497   12.075
>    .perf5            46.377    2.041   22.725    0.000   46.377   11.013
>    .emreg1           27.736    1.523   18.215    0.000   27.736    7.368
>    .emreg2           27.450    1.525   18.002    0.000   27.450    7.399
>    .emreg3           27.602    1.484   18.594    0.000   27.602    7.054
>    .emreg4           27.643    1.593   17.356    0.000   27.643    7.383
>    .emreg5           27.312    1.598   17.095    0.000   27.312    7.366
>    .perfectionism     0.000                               0.000    0.000
>    .em_regulation     0.000                               0.000    0.000
> 
> Variances:
>                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
>    .perf1             6.408    0.988    6.487    0.000    6.408    0.382
>    .perf2             5.212    0.739    7.055    0.000    5.212    0.331
>    .perf3             4.858    0.715    6.795    0.000    4.858    0.294
>    .perf4             4.789    0.612    7.825    0.000    4.789    0.337
>    .perf5             6.707    1.017    6.595    0.000    6.707    0.378
>    .emreg1            4.668    0.761    6.132    0.000    4.668    0.329
>    .emreg2            3.944    0.567    6.961    0.000    3.944    0.287
>    .emreg3            5.693    0.784    7.262    0.000    5.693    0.372
>    .emreg4            4.393    0.766    5.731    0.000    4.393    0.313
>    .emreg5            3.939    0.549    7.178    0.000    3.939    0.287
>    .perfectionism     9.765    1.498    6.517    0.000    0.943    0.943
>    .em_regulation     6.395    0.873    7.324    0.000    0.673    0.673
> 
> 
> Group 2 [1]:
> 
> Latent Variables:
>                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
>   perfectionism =~                                                      
>     perf1             1.000                               3.303    0.831
>     perf2   (.p2.)    1.008    0.061   16.421    0.000    3.331    0.831
>     perf3   (.p3.)    1.061    0.070   15.196    0.000    3.505    0.841
>     perf4   (.p4.)    0.953    0.061   15.530    0.000    3.148    0.776
>     perf5   (.p5.)    1.032    0.057   17.969    0.000    3.408    0.827
>   em_regulation =~                                                      
>     emreg1            1.000                               3.361    0.817
>     emreg2  (.p7.)    1.016    0.054   18.902    0.000    3.416    0.865
>     emreg3  (.p8.)    1.006    0.058   17.453    0.000    3.381    0.875
>     emreg4  (.p9.)    1.006    0.061   16.490    0.000    3.383    0.824
>     emreg5  (.10.)    1.016    0.057   17.907    0.000    3.414    0.866
> 
> Regressions:
>                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
>   perfectionism ~                                                       
>     edscore           0.278    0.022   12.811    0.000    0.084    0.758
>   em_regulation ~                                                       
>     edscore          -0.234    0.029   -8.168    0.000   -0.070   -0.627
> 
> Covariances:
>                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
>  .perfectionism ~~                                                      
>    .em_regulation     0.980    0.509    1.926    0.054    0.174    0.174
> 
> Intercepts:
>                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
>    .perf1            34.657    0.474   73.051    0.000   34.657    8.716
>    .perf2            34.548    0.550   62.810    0.000   34.548    8.619
>    .perf3            34.106    0.504   67.695    0.000   34.106    8.185
>    .perf4            34.827    0.572   60.864    0.000   34.827    8.587
>    .perf5            34.094    0.489   69.745    0.000   34.094    8.276
>    .emreg1           45.034    0.616   73.083    0.000   45.034   10.951
>    .emreg2           44.916    0.622   72.194    0.000   44.916   11.377
>    .emreg3           44.952    0.595   75.555    0.000   44.952   11.632
>    .emreg4           44.896    0.625   71.829    0.000   44.896   10.936
>    .emreg5           45.010    0.602   74.747    0.000   45.010   11.418
>    .perfectionism     0.000                               0.000    0.000
>    .em_regulation     0.000                               0.000    0.000
> 
> Variances:
>                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
>    .perf1             4.897    0.618    7.924    0.000    4.897    0.310
>    .perf2             4.969    0.611    8.136    0.000    4.969    0.309
>    .perf3             5.077    0.760    6.679    0.000    5.077    0.292
>    .perf4             6.539    0.974    6.713    0.000    6.539    0.398
>    .perf5             5.354    0.797    6.717    0.000    5.354    0.315
>    .emreg1            5.615    0.808    6.948    0.000    5.615    0.332
>    .emreg2            3.917    0.512    7.656    0.000    3.917    0.251
>    .emreg3            3.500    0.533    6.569    0.000    3.500    0.234
>    .emreg4            5.411    0.772    7.010    0.000    5.411    0.321
>    .emreg5            3.881    0.648    5.992    0.000    3.881    0.250
>    .perfectionism     4.636    0.663    6.993    0.000    0.425    0.425
>    .em_regulation     6.850    0.986    6.949    0.000    0.606    0.606
m2 <- fitMeasures(fit_model_group2)[names = c("cfi", "tli")]
fit_model_group3 <- sem(model, data = data, se = "robust", group = "sex",
                       group.equal = c("loadings", "intercepts"))
summary(fit_model_group3, fit.measures = TRUE, standardized = TRUE)
> lavaan 0.6-11 ended normally after 186 iterations
> 
>   Estimator                                         ML
>   Optimization method                           NLMINB
>   Number of model parameters                        68
>   Number of equality constraints                    18
>                                                       
>   Number of observations per group:                   
>     0                                              150
>     1                                              150
>                                                       
> Model Test User Model:
>                                                       
>   Test statistic                                91.473
>   Degrees of freedom                               100
>   P-value (Chi-square)                           0.717
>   Test statistic for each group:
>     0                                           49.681
>     1                                           41.792
> 
> Model Test Baseline Model:
> 
>   Test statistic                              2330.188
>   Degrees of freedom                               110
>   P-value                                        0.000
> 
> User Model versus Baseline Model:
> 
>   Comparative Fit Index (CFI)                    1.000
>   Tucker-Lewis Index (TLI)                       1.004
> 
> Loglikelihood and Information Criteria:
> 
>   Loglikelihood user model (H0)              -7262.215
>   Loglikelihood unrestricted model (H1)      -7216.479
>                                                       
>   Akaike (AIC)                               14624.431
>   Bayesian (BIC)                             14809.620
>   Sample-size adjusted Bayesian (BIC)        14651.049
> 
> Root Mean Square Error of Approximation:
> 
>   RMSEA                                          0.000
>   90 Percent confidence interval - lower         0.000
>   90 Percent confidence interval - upper         0.034
>   P-value RMSEA <= 0.05                          0.997
> 
> Standardized Root Mean Square Residual:
> 
>   SRMR                                           0.043
> 
> Parameter Estimates:
> 
>   Standard errors                           Robust.sem
>   Information                                 Expected
>   Information saturated (h1) model          Structured
> 
> 
> Group 1 [0]:
> 
> Latent Variables:
>                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
>   perfectionism =~                                                      
>     perf1             1.000                               3.194    0.782
>     perf2   (.p2.)    1.019    0.061   16.614    0.000    3.256    0.819
>     perf3   (.p3.)    1.068    0.068   15.604    0.000    3.411    0.840
>     perf4   (.p4.)    0.957    0.061   15.751    0.000    3.055    0.813
>     perf5   (.p5.)    1.048    0.058   18.030    0.000    3.347    0.789
>   em_regulation =~                                                      
>     emreg1            1.000                               3.085    0.819
>     emreg2  (.p7.)    1.015    0.053   19.001    0.000    3.130    0.844
>     emreg3  (.p8.)    1.005    0.057   17.560    0.000    3.101    0.793
>     emreg4  (.p9.)    1.004    0.061   16.414    0.000    3.097    0.828
>     emreg5  (.10.)    1.018    0.057   17.751    0.000    3.139    0.845
> 
> Regressions:
>                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
>   perfectionism ~                                                       
>     edscore          -0.133    0.050   -2.626    0.009   -0.042   -0.239
>   em_regulation ~                                                       
>     edscore           0.306    0.038    7.997    0.000    0.099    0.572
> 
> Covariances:
>                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
>  .perfectionism ~~                                                      
>    .em_regulation    -2.950    0.707   -4.171    0.000   -0.376   -0.376
> 
> Intercepts:
>                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
>    .perf1   (.27.)   45.856    2.014   22.771    0.000   45.856   11.225
>    .perf2   (.28.)   46.144    1.998   23.090    0.000   46.144   11.605
>    .perf3   (.29.)   46.156    2.075   22.240    0.000   46.156   11.364
>    .perf4   (.30.)   45.559    1.875   24.294    0.000   45.559   12.119
>    .perf5   (.31.)   46.137    2.065   22.346    0.000   46.137   10.876
>    .emreg1  (.32.)   27.745    1.519   18.266    0.000   27.745    7.367
>    .emreg2  (.33.)   27.424    1.520   18.048    0.000   27.424    7.397
>    .emreg3  (.34.)   27.594    1.493   18.488    0.000   27.594    7.052
>    .emreg4  (.35.)   27.611    1.588   17.382    0.000   27.611    7.381
>    .emreg5  (.36.)   27.363    1.594   17.162    0.000   27.363    7.368
>    .prfctns           0.000                               0.000    0.000
>    .em_rglt           0.000                               0.000    0.000
> 
> Variances:
>                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
>    .perf1             6.488    0.987    6.574    0.000    6.488    0.389
>    .perf2             5.208    0.739    7.043    0.000    5.208    0.329
>    .perf3             4.860    0.714    6.811    0.000    4.860    0.295
>    .perf4             4.799    0.611    7.849    0.000    4.799    0.340
>    .perf5             6.789    1.020    6.653    0.000    6.789    0.377
>    .emreg1            4.667    0.761    6.129    0.000    4.667    0.329
>    .emreg2            3.948    0.566    6.972    0.000    3.948    0.287
>    .emreg3            5.694    0.783    7.276    0.000    5.694    0.372
>    .emreg4            4.400    0.767    5.739    0.000    4.400    0.314
>    .emreg5            3.938    0.548    7.181    0.000    3.938    0.286
>    .perfectionism     9.619    1.476    6.518    0.000    0.943    0.943
>    .em_regulation     6.403    0.871    7.348    0.000    0.673    0.673
> 
> 
> Group 2 [1]:
> 
> Latent Variables:
>                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
>   perfectionism =~                                                      
>     perf1             1.000                               3.278    0.827
>     perf2   (.p2.)    1.019    0.061   16.614    0.000    3.341    0.832
>     perf3   (.p3.)    1.068    0.068   15.604    0.000    3.500    0.841
>     perf4   (.p4.)    0.957    0.061   15.751    0.000    3.135    0.774
>     perf5   (.p5.)    1.048    0.058   18.030    0.000    3.435    0.828
>   em_regulation =~                                                      
>     emreg1            1.000                               3.363    0.817
>     emreg2  (.p7.)    1.015    0.053   19.001    0.000    3.412    0.865
>     emreg3  (.p8.)    1.005    0.057   17.560    0.000    3.380    0.875
>     emreg4  (.p9.)    1.004    0.061   16.414    0.000    3.376    0.823
>     emreg5  (.10.)    1.018    0.057   17.751    0.000    3.422    0.866
> 
> Regressions:
>                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
>   perfectionism ~                                                       
>     edscore           0.276    0.021   12.825    0.000    0.084    0.759
>   em_regulation ~                                                       
>     edscore          -0.234    0.029   -8.178    0.000   -0.070   -0.627
> 
> Covariances:
>                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
>  .perfectionism ~~                                                      
>    .em_regulation     0.973    0.505    1.925    0.054    0.174    0.174
> 
> Intercepts:
>                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
>    .perf1   (.27.)   45.856    2.014   22.771    0.000   45.856   11.574
>    .perf2   (.28.)   46.144    1.998   23.090    0.000   46.144   11.491
>    .perf3   (.29.)   46.156    2.075   22.240    0.000   46.156   11.090
>    .perf4   (.30.)   45.559    1.875   24.294    0.000   45.559   11.250
>    .perf5   (.31.)   46.137    2.065   22.346    0.000   46.137   11.121
>    .emreg1  (.32.)   27.745    1.519   18.266    0.000   27.745    6.745
>    .emreg2  (.33.)   27.424    1.520   18.048    0.000   27.424    6.952
>    .emreg3  (.34.)   27.594    1.493   18.488    0.000   27.594    7.142
>    .emreg4  (.35.)   27.611    1.588   17.382    0.000   27.611    6.733
>    .emreg5  (.36.)   27.363    1.594   17.162    0.000   27.363    6.927
>    .prfctns         -11.321    2.099   -5.394    0.000   -3.454   -3.454
>    .em_rglt          17.273    1.673   10.323    0.000    5.137    5.137
> 
> Variances:
>                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
>    .perf1             4.954    0.613    8.075    0.000    4.954    0.316
>    .perf2             4.961    0.609    8.140    0.000    4.961    0.308
>    .perf3             5.070    0.760    6.675    0.000    5.070    0.293
>    .perf4             6.571    0.974    6.744    0.000    6.571    0.401
>    .perf5             5.411    0.800    6.764    0.000    5.411    0.314
>    .emreg1            5.614    0.807    6.953    0.000    5.614    0.332
>    .emreg2            3.921    0.511    7.667    0.000    3.921    0.252
>    .emreg3            3.501    0.534    6.556    0.000    3.501    0.235
>    .emreg4            5.418    0.772    7.016    0.000    5.418    0.322
>    .emreg5            3.890    0.650    5.988    0.000    3.890    0.249
>    .perfectionism     4.558    0.649    7.023    0.000    0.424    0.424
>    .em_regulation     6.857    0.983    6.976    0.000    0.606    0.606
m3 <- fitMeasures(fit_model_group3)[names = c("cfi", "tli")]

lavTestLRT(fit_model_group1, fit_model_group2, fit_model_group3)
Df AIC BIC Chisq Chisq diff Df diff Pr(>Chisq)
fit_model_group1 84 14639 14883 74
fit_model_group2 92 14634 14848 85 10.5 8 0.23
fit_model_group3 100 14624 14810 91 6.9 8 0.54
# Not sig diff => metric measurement invariance can be assumed
# Not sig diff => metric scalar invariance can be assumed

round(m1 - m2, 3)
>   cfi   tli 
> 0.000 0.002
#  cfi   tli 
#0.000 0.002 
round(m2 - m3, 3)
> cfi tli 
>   0   0
#   cfi    tli 
#  0   0 

Gender invariance testing

# constrained for perf
model_perf_const <- "
# Measurement model
perfectionism =~ perf1 + perf2 + perf3 + perf4 + perf5
em_regulation =~ emreg1 + emreg2 + emreg3 + emreg4 + emreg5

# Structural model
## Regressions
perfectionism ~ c(b1, b1)*edscore
em_regulation ~ edscore
"
fit_perf_cons <- sem(model_perf_const, data = data, se = "robust", group = "sex",
                     group.equal = c("loadings", "intercepts"))
summary(fit_perf_cons, fit.measures = TRUE, standardized = TRUE)
> lavaan 0.6-11 ended normally after 164 iterations
> 
>   Estimator                                         ML
>   Optimization method                           NLMINB
>   Number of model parameters                        68
>   Number of equality constraints                    19
>                                                       
>   Number of observations per group:                   
>     0                                              150
>     1                                              150
>                                                       
> Model Test User Model:
>                                                       
>   Test statistic                               146.899
>   Degrees of freedom                               101
>   P-value (Chi-square)                           0.002
>   Test statistic for each group:
>     0                                           98.037
>     1                                           48.861
> 
> Model Test Baseline Model:
> 
>   Test statistic                              2330.188
>   Degrees of freedom                               110
>   P-value                                        0.000
> 
> User Model versus Baseline Model:
> 
>   Comparative Fit Index (CFI)                    0.979
>   Tucker-Lewis Index (TLI)                       0.977
> 
> Loglikelihood and Information Criteria:
> 
>   Loglikelihood user model (H0)              -7289.928
>   Loglikelihood unrestricted model (H1)      -7216.479
>                                                       
>   Akaike (AIC)                               14677.857
>   Bayesian (BIC)                             14859.342
>   Sample-size adjusted Bayesian (BIC)        14703.943
> 
> Root Mean Square Error of Approximation:
> 
>   RMSEA                                          0.055
>   90 Percent confidence interval - lower         0.034
>   90 Percent confidence interval - upper         0.074
>   P-value RMSEA <= 0.05                          0.322
> 
> Standardized Root Mean Square Residual:
> 
>   SRMR                                           0.151
> 
> Parameter Estimates:
> 
>   Standard errors                           Robust.sem
>   Information                                 Expected
>   Information saturated (h1) model          Structured
> 
> 
> Group 1 [0]:
> 
> Latent Variables:
>                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
>   perfectionism =~                                                      
>     perf1             1.000                               3.928    0.839
>     perf2   (.p2.)    1.016    0.054   18.895    0.000    3.991    0.869
>     perf3   (.p3.)    1.067    0.060   17.902    0.000    4.191    0.888
>     perf4   (.p4.)    0.945    0.052   18.316    0.000    3.713    0.858
>     perf5   (.p5.)    1.045    0.051   20.388    0.000    4.103    0.843
>   em_regulation =~                                                      
>     emreg1            1.000                               2.858    0.798
>     emreg2  (.p7.)    1.015    0.057   17.927    0.000    2.900    0.825
>     emreg3  (.p8.)    1.005    0.060   16.765    0.000    2.873    0.769
>     emreg4  (.p9.)    1.004    0.065   15.423    0.000    2.870    0.807
>     emreg5  (.10.)    1.018    0.061   16.756    0.000    2.909    0.826
> 
> Regressions:
>                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
>   perfectionism ~                                                       
>     edscore   (b1)    0.220    0.019   11.665    0.000    0.056    0.322
>   em_regulation ~                                                       
>     edscore           0.210    0.036    5.827    0.000    0.073    0.422
> 
> Covariances:
>                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
>  .perfectionism ~~                                                      
>    .em_regulation    -4.096    0.922   -4.443    0.000   -0.425   -0.425
> 
> Intercepts:
>                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
>    .perf1   (.27.)   31.856    0.786   40.542    0.000   31.856    6.805
>    .perf2   (.28.)   31.900    0.870   36.670    0.000   31.900    6.947
>    .perf3   (.29.)   31.212    0.886   35.234    0.000   31.212    6.614
>    .perf4   (.30.)   32.264    0.862   37.413    0.000   32.264    7.456
>    .perf5   (.31.)   31.492    0.822   38.288    0.000   31.492    6.473
>    .emreg1  (.32.)   31.594    1.434   22.038    0.000   31.594    8.819
>    .emreg2  (.33.)   31.331    1.446   21.668    0.000   31.331    8.912
>    .emreg3  (.34.)   31.464    1.429   22.025    0.000   31.464    8.424
>    .emreg4  (.35.)   31.476    1.493   21.084    0.000   31.476    8.855
>    .emreg5  (.36.)   31.281    1.510   20.711    0.000   31.281    8.884
>    .prfctns           0.000                               0.000    0.000
>    .em_rglt           0.000                               0.000    0.000
> 
> Variances:
>                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
>    .perf1             6.484    0.975    6.653    0.000    6.484    0.296
>    .perf2             5.156    0.742    6.949    0.000    5.156    0.245
>    .perf3             4.713    0.726    6.490    0.000    4.713    0.212
>    .perf4             4.943    0.633    7.813    0.000    4.943    0.264
>    .perf5             6.835    1.005    6.799    0.000    6.835    0.289
>    .emreg1            4.666    0.762    6.127    0.000    4.666    0.364
>    .emreg2            3.949    0.567    6.964    0.000    3.949    0.319
>    .emreg3            5.693    0.783    7.272    0.000    5.693    0.408
>    .emreg4            4.401    0.768    5.726    0.000    4.401    0.348
>    .emreg5            3.939    0.549    7.179    0.000    3.939    0.318
>    .perfectionism    13.830    1.997    6.924    0.000    0.896    0.896
>    .em_regulation     6.714    0.937    7.168    0.000    0.822    0.822
> 
> 
> Group 2 [1]:
> 
> Latent Variables:
>                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
>   perfectionism =~                                                      
>     perf1             1.000                               2.964    0.802
>     perf2   (.p2.)    1.016    0.054   18.895    0.000    3.011    0.803
>     perf3   (.p3.)    1.067    0.060   17.902    0.000    3.162    0.815
>     perf4   (.p4.)    0.945    0.052   18.316    0.000    2.801    0.736
>     perf5   (.p5.)    1.045    0.051   20.388    0.000    3.096    0.799
>   em_regulation =~                                                      
>     emreg1            1.000                               3.420    0.822
>     emreg2  (.p7.)    1.015    0.057   17.927    0.000    3.471    0.869
>     emreg3  (.p8.)    1.005    0.060   16.765    0.000    3.438    0.878
>     emreg4  (.p9.)    1.004    0.065   15.423    0.000    3.434    0.828
>     emreg5  (.10.)    1.018    0.061   16.756    0.000    3.481    0.870
> 
> Regressions:
>                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
>   perfectionism ~                                                       
>     edscore   (b1)    0.220    0.019   11.665    0.000    0.074    0.669
>   em_regulation ~                                                       
>     edscore          -0.244    0.029   -8.419    0.000   -0.071   -0.643
> 
> Covariances:
>                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
>  .perfectionism ~~                                                      
>    .em_regulation     1.024    0.502    2.038    0.042    0.177    0.177
> 
> Intercepts:
>                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
>    .perf1   (.27.)   31.856    0.786   40.542    0.000   31.856    8.615
>    .perf2   (.28.)   31.900    0.870   36.670    0.000   31.900    8.511
>    .perf3   (.29.)   31.212    0.886   35.234    0.000   31.212    8.042
>    .perf4   (.30.)   32.264    0.862   37.413    0.000   32.264    8.479
>    .perf5   (.31.)   31.492    0.822   38.288    0.000   31.492    8.129
>    .emreg1  (.32.)   31.594    1.434   22.038    0.000   31.594    7.593
>    .emreg2  (.33.)   31.331    1.446   21.668    0.000   31.331    7.841
>    .emreg3  (.34.)   31.464    1.429   22.025    0.000   31.464    8.038
>    .emreg4  (.35.)   31.476    1.493   21.084    0.000   31.476    7.587
>    .emreg5  (.36.)   31.281    1.510   20.711    0.000   31.281    7.819
>    .prfctns           3.761    0.494    7.612    0.000    1.269    1.269
>    .em_rglt          13.614    1.594    8.540    0.000    3.980    3.980
> 
> Variances:
>                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
>    .perf1             4.889    0.597    8.194    0.000    4.889    0.358
>    .perf2             4.980    0.609    8.184    0.000    4.980    0.354
>    .perf3             5.065    0.761    6.654    0.000    5.065    0.336
>    .perf4             6.633    0.979    6.777    0.000    6.633    0.458
>    .perf5             5.422    0.793    6.841    0.000    5.422    0.361
>    .emreg1            5.614    0.808    6.948    0.000    5.614    0.324
>    .emreg2            3.921    0.512    7.661    0.000    3.921    0.246
>    .emreg3            3.501    0.534    6.559    0.000    3.501    0.228
>    .emreg4            5.418    0.773    7.009    0.000    5.418    0.315
>    .emreg5            3.891    0.651    5.974    0.000    3.891    0.243
>    .perfectionism     4.852    0.672    7.218    0.000    0.552    0.552
>    .em_regulation     6.865    1.004    6.836    0.000    0.587    0.587
summary(fit_model_group3, fit.measures = TRUE, standardized = TRUE)
> lavaan 0.6-11 ended normally after 186 iterations
> 
>   Estimator                                         ML
>   Optimization method                           NLMINB
>   Number of model parameters                        68
>   Number of equality constraints                    18
>                                                       
>   Number of observations per group:                   
>     0                                              150
>     1                                              150
>                                                       
> Model Test User Model:
>                                                       
>   Test statistic                                91.473
>   Degrees of freedom                               100
>   P-value (Chi-square)                           0.717
>   Test statistic for each group:
>     0                                           49.681
>     1                                           41.792
> 
> Model Test Baseline Model:
> 
>   Test statistic                              2330.188
>   Degrees of freedom                               110
>   P-value                                        0.000
> 
> User Model versus Baseline Model:
> 
>   Comparative Fit Index (CFI)                    1.000
>   Tucker-Lewis Index (TLI)                       1.004
> 
> Loglikelihood and Information Criteria:
> 
>   Loglikelihood user model (H0)              -7262.215
>   Loglikelihood unrestricted model (H1)      -7216.479
>                                                       
>   Akaike (AIC)                               14624.431
>   Bayesian (BIC)                             14809.620
>   Sample-size adjusted Bayesian (BIC)        14651.049
> 
> Root Mean Square Error of Approximation:
> 
>   RMSEA                                          0.000
>   90 Percent confidence interval - lower         0.000
>   90 Percent confidence interval - upper         0.034
>   P-value RMSEA <= 0.05                          0.997
> 
> Standardized Root Mean Square Residual:
> 
>   SRMR                                           0.043
> 
> Parameter Estimates:
> 
>   Standard errors                           Robust.sem
>   Information                                 Expected
>   Information saturated (h1) model          Structured
> 
> 
> Group 1 [0]:
> 
> Latent Variables:
>                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
>   perfectionism =~                                                      
>     perf1             1.000                               3.194    0.782
>     perf2   (.p2.)    1.019    0.061   16.614    0.000    3.256    0.819
>     perf3   (.p3.)    1.068    0.068   15.604    0.000    3.411    0.840
>     perf4   (.p4.)    0.957    0.061   15.751    0.000    3.055    0.813
>     perf5   (.p5.)    1.048    0.058   18.030    0.000    3.347    0.789
>   em_regulation =~                                                      
>     emreg1            1.000                               3.085    0.819
>     emreg2  (.p7.)    1.015    0.053   19.001    0.000    3.130    0.844
>     emreg3  (.p8.)    1.005    0.057   17.560    0.000    3.101    0.793
>     emreg4  (.p9.)    1.004    0.061   16.414    0.000    3.097    0.828
>     emreg5  (.10.)    1.018    0.057   17.751    0.000    3.139    0.845
> 
> Regressions:
>                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
>   perfectionism ~                                                       
>     edscore          -0.133    0.050   -2.626    0.009   -0.042   -0.239
>   em_regulation ~                                                       
>     edscore           0.306    0.038    7.997    0.000    0.099    0.572
> 
> Covariances:
>                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
>  .perfectionism ~~                                                      
>    .em_regulation    -2.950    0.707   -4.171    0.000   -0.376   -0.376
> 
> Intercepts:
>                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
>    .perf1   (.27.)   45.856    2.014   22.771    0.000   45.856   11.225
>    .perf2   (.28.)   46.144    1.998   23.090    0.000   46.144   11.605
>    .perf3   (.29.)   46.156    2.075   22.240    0.000   46.156   11.364
>    .perf4   (.30.)   45.559    1.875   24.294    0.000   45.559   12.119
>    .perf5   (.31.)   46.137    2.065   22.346    0.000   46.137   10.876
>    .emreg1  (.32.)   27.745    1.519   18.266    0.000   27.745    7.367
>    .emreg2  (.33.)   27.424    1.520   18.048    0.000   27.424    7.397
>    .emreg3  (.34.)   27.594    1.493   18.488    0.000   27.594    7.052
>    .emreg4  (.35.)   27.611    1.588   17.382    0.000   27.611    7.381
>    .emreg5  (.36.)   27.363    1.594   17.162    0.000   27.363    7.368
>    .prfctns           0.000                               0.000    0.000
>    .em_rglt           0.000                               0.000    0.000
> 
> Variances:
>                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
>    .perf1             6.488    0.987    6.574    0.000    6.488    0.389
>    .perf2             5.208    0.739    7.043    0.000    5.208    0.329
>    .perf3             4.860    0.714    6.811    0.000    4.860    0.295
>    .perf4             4.799    0.611    7.849    0.000    4.799    0.340
>    .perf5             6.789    1.020    6.653    0.000    6.789    0.377
>    .emreg1            4.667    0.761    6.129    0.000    4.667    0.329
>    .emreg2            3.948    0.566    6.972    0.000    3.948    0.287
>    .emreg3            5.694    0.783    7.276    0.000    5.694    0.372
>    .emreg4            4.400    0.767    5.739    0.000    4.400    0.314
>    .emreg5            3.938    0.548    7.181    0.000    3.938    0.286
>    .perfectionism     9.619    1.476    6.518    0.000    0.943    0.943
>    .em_regulation     6.403    0.871    7.348    0.000    0.673    0.673
> 
> 
> Group 2 [1]:
> 
> Latent Variables:
>                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
>   perfectionism =~                                                      
>     perf1             1.000                               3.278    0.827
>     perf2   (.p2.)    1.019    0.061   16.614    0.000    3.341    0.832
>     perf3   (.p3.)    1.068    0.068   15.604    0.000    3.500    0.841
>     perf4   (.p4.)    0.957    0.061   15.751    0.000    3.135    0.774
>     perf5   (.p5.)    1.048    0.058   18.030    0.000    3.435    0.828
>   em_regulation =~                                                      
>     emreg1            1.000                               3.363    0.817
>     emreg2  (.p7.)    1.015    0.053   19.001    0.000    3.412    0.865
>     emreg3  (.p8.)    1.005    0.057   17.560    0.000    3.380    0.875
>     emreg4  (.p9.)    1.004    0.061   16.414    0.000    3.376    0.823
>     emreg5  (.10.)    1.018    0.057   17.751    0.000    3.422    0.866
> 
> Regressions:
>                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
>   perfectionism ~                                                       
>     edscore           0.276    0.021   12.825    0.000    0.084    0.759
>   em_regulation ~                                                       
>     edscore          -0.234    0.029   -8.178    0.000   -0.070   -0.627
> 
> Covariances:
>                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
>  .perfectionism ~~                                                      
>    .em_regulation     0.973    0.505    1.925    0.054    0.174    0.174
> 
> Intercepts:
>                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
>    .perf1   (.27.)   45.856    2.014   22.771    0.000   45.856   11.574
>    .perf2   (.28.)   46.144    1.998   23.090    0.000   46.144   11.491
>    .perf3   (.29.)   46.156    2.075   22.240    0.000   46.156   11.090
>    .perf4   (.30.)   45.559    1.875   24.294    0.000   45.559   11.250
>    .perf5   (.31.)   46.137    2.065   22.346    0.000   46.137   11.121
>    .emreg1  (.32.)   27.745    1.519   18.266    0.000   27.745    6.745
>    .emreg2  (.33.)   27.424    1.520   18.048    0.000   27.424    6.952
>    .emreg3  (.34.)   27.594    1.493   18.488    0.000   27.594    7.142
>    .emreg4  (.35.)   27.611    1.588   17.382    0.000   27.611    6.733
>    .emreg5  (.36.)   27.363    1.594   17.162    0.000   27.363    6.927
>    .prfctns         -11.321    2.099   -5.394    0.000   -3.454   -3.454
>    .em_rglt          17.273    1.673   10.323    0.000    5.137    5.137
> 
> Variances:
>                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
>    .perf1             4.954    0.613    8.075    0.000    4.954    0.316
>    .perf2             4.961    0.609    8.140    0.000    4.961    0.308
>    .perf3             5.070    0.760    6.675    0.000    5.070    0.293
>    .perf4             6.571    0.974    6.744    0.000    6.571    0.401
>    .perf5             5.411    0.800    6.764    0.000    5.411    0.314
>    .emreg1            5.614    0.807    6.953    0.000    5.614    0.332
>    .emreg2            3.921    0.511    7.667    0.000    3.921    0.252
>    .emreg3            3.501    0.534    6.556    0.000    3.501    0.235
>    .emreg4            5.418    0.772    7.016    0.000    5.418    0.322
>    .emreg5            3.890    0.650    5.988    0.000    3.890    0.249
>    .perfectionism     4.558    0.649    7.023    0.000    0.424    0.424
>    .em_regulation     6.857    0.983    6.976    0.000    0.606    0.606
anova(fit_perf_cons, fit_model_group3)
Df AIC BIC Chisq Chisq diff Df diff Pr(>Chisq)
fit_model_group3 100 14624 14810 91
fit_perf_cons 101 14678 14859 147 55 1 0
# sig diff, perf variant by gender
perf_cons <- fitMeasures(fit_perf_cons)[names = c("cfi", "tli")]
round(m3 - perf_cons, 3)
>   cfi   tli 
> 0.021 0.027
# constrained for em
model_em_const <- "
# Measurement model
perfectionism =~ perf1 + perf2 + perf3 + perf4 + perf5
em_regulation =~ emreg1 + emreg2 + emreg3 + emreg4 + emreg5

# Structural model
## Regressions
perfectionism ~ edscore
em_regulation ~ c(b2, b2)*edscore
"
fit_em_cons <- sem(model_em_const, data = data, se = "robust", group = "sex",
                     group.equal = c("loadings", "intercepts"))
summary(fit_em_cons, fit.measures = TRUE, standardized = TRUE)
> lavaan 0.6-11 ended normally after 139 iterations
> 
>   Estimator                                         ML
>   Optimization method                           NLMINB
>   Number of model parameters                        68
>   Number of equality constraints                    19
>                                                       
>   Number of observations per group:                   
>     0                                              150
>     1                                              150
>                                                       
> Model Test User Model:
>                                                       
>   Test statistic                               201.197
>   Degrees of freedom                               101
>   P-value (Chi-square)                           0.000
>   Test statistic for each group:
>     0                                          139.894
>     1                                           61.303
> 
> Model Test Baseline Model:
> 
>   Test statistic                              2330.188
>   Degrees of freedom                               110
>   P-value                                        0.000
> 
> User Model versus Baseline Model:
> 
>   Comparative Fit Index (CFI)                    0.955
>   Tucker-Lewis Index (TLI)                       0.951
> 
> Loglikelihood and Information Criteria:
> 
>   Loglikelihood user model (H0)              -7317.078
>   Loglikelihood unrestricted model (H1)      -7216.479
>                                                       
>   Akaike (AIC)                               14732.155
>   Bayesian (BIC)                             14913.640
>   Sample-size adjusted Bayesian (BIC)        14758.241
> 
> Root Mean Square Error of Approximation:
> 
>   RMSEA                                          0.081
>   90 Percent confidence interval - lower         0.065
>   90 Percent confidence interval - upper         0.098
>   P-value RMSEA <= 0.05                          0.001
> 
> Standardized Root Mean Square Residual:
> 
>   SRMR                                           0.180
> 
> Parameter Estimates:
> 
>   Standard errors                           Robust.sem
>   Information                                 Expected
>   Information saturated (h1) model          Structured
> 
> 
> Group 1 [0]:
> 
> Latent Variables:
>                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
>   perfectionism =~                                                      
>     perf1             1.000                               3.265    0.788
>     perf2   (.p2.)    1.019    0.058   17.650    0.000    3.329    0.825
>     perf3   (.p3.)    1.068    0.064   16.579    0.000    3.487    0.845
>     perf4   (.p4.)    0.957    0.057   16.712    0.000    3.123    0.819
>     perf5   (.p5.)    1.048    0.055   19.157    0.000    3.422    0.796
>   em_regulation =~                                                      
>     emreg1            1.000                               3.581    0.856
>     emreg2  (.p7.)    1.017    0.051   20.037    0.000    3.642    0.879
>     emreg3  (.p8.)    1.009    0.055   18.189    0.000    3.612    0.834
>     emreg4  (.p9.)    1.006    0.057   17.724    0.000    3.604    0.864
>     emreg5  (.10.)    1.022    0.054   19.040    0.000    3.659    0.880
> 
> Regressions:
>                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
>   perfectionism ~                                                       
>     edscore           0.040    0.048    0.844    0.399    0.012    0.071
>   em_regulation ~                                                       
>     edscore   (b2)   -0.119    0.023   -5.183    0.000   -0.033   -0.191
> 
> Covariances:
>                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
>  .perfectionism ~~                                                      
>    .em_regulation    -5.377    1.153   -4.662    0.000   -0.470   -0.470
> 
> Intercepts:
>                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
>    .perf1   (.27.)   38.992    1.907   20.452    0.000   38.992    9.416
>    .perf2   (.28.)   39.147    1.940   20.174    0.000   39.147    9.700
>    .perf3   (.29.)   38.826    2.029   19.137    0.000   38.826    9.411
>    .perf4   (.30.)   38.994    1.818   21.444    0.000   38.994   10.221
>    .perf5   (.31.)   38.944    1.980   19.672    0.000   38.944    9.054
>    .emreg1  (.32.)   44.652    0.931   47.950    0.000   44.652   10.672
>    .emreg2  (.33.)   44.591    0.945   47.175    0.000   44.591   10.755
>    .emreg3  (.34.)   44.605    0.914   48.811    0.000   44.605   10.299
>    .emreg4  (.35.)   44.596    0.914   48.766    0.000   44.596   10.687
>    .emreg5  (.36.)   44.588    0.915   48.710    0.000   44.588   10.721
>    .prfctns           0.000                               0.000    0.000
>    .em_rglt           0.000                               0.000    0.000
> 
> Variances:
>                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
>    .perf1             6.489    0.987    6.577    0.000    6.489    0.378
>    .perf2             5.208    0.739    7.052    0.000    5.208    0.320
>    .perf3             4.860    0.713    6.821    0.000    4.860    0.286
>    .perf4             4.799    0.611    7.858    0.000    4.799    0.330
>    .perf5             6.789    1.019    6.664    0.000    6.789    0.367
>    .emreg1            4.684    0.790    5.930    0.000    4.684    0.268
>    .emreg2            3.923    0.572    6.862    0.000    3.923    0.228
>    .emreg3            5.712    0.809    7.063    0.000    5.712    0.305
>    .emreg4            4.426    0.750    5.899    0.000    4.426    0.254
>    .emreg5            3.907    0.588    6.645    0.000    3.907    0.226
>    .perfectionism    10.607    1.600    6.629    0.000    0.995    0.995
>    .em_regulation    12.354    1.528    8.086    0.000    0.963    0.963
> 
> 
> Group 2 [1]:
> 
> Latent Variables:
>                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
>   perfectionism =~                                                      
>     perf1             1.000                               3.380    0.835
>     perf2   (.p2.)    1.019    0.058   17.650    0.000    3.445    0.840
>     perf3   (.p3.)    1.068    0.064   16.579    0.000    3.610    0.848
>     perf4   (.p4.)    0.957    0.057   16.712    0.000    3.233    0.784
>     perf5   (.p5.)    1.048    0.055   19.157    0.000    3.542    0.836
>   em_regulation =~                                                      
>     emreg1            1.000                               3.005    0.784
>     emreg2  (.p7.)    1.017    0.051   20.037    0.000    3.056    0.838
>     emreg3  (.p8.)    1.009    0.055   18.189    0.000    3.031    0.850
>     emreg4  (.p9.)    1.006    0.057   17.724    0.000    3.024    0.794
>     emreg5  (.10.)    1.022    0.054   19.040    0.000    3.071    0.843
> 
> Regressions:
>                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
>   perfectionism ~                                                       
>     edscore           0.290    0.021   13.603    0.000    0.086    0.774
>   em_regulation ~                                                       
>     edscore   (b2)   -0.119    0.023   -5.183    0.000   -0.040   -0.357
> 
> Covariances:
>                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
>  .perfectionism ~~                                                      
>    .em_regulation     1.102    0.539    2.042    0.041    0.183    0.183
> 
> Intercepts:
>                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
>    .perf1   (.27.)   38.992    1.907   20.452    0.000   38.992    9.635
>    .perf2   (.28.)   39.147    1.940   20.174    0.000   39.147    9.542
>    .perf3   (.29.)   38.826    2.029   19.137    0.000   38.826    9.126
>    .perf4   (.30.)   38.994    1.818   21.444    0.000   38.994    9.451
>    .perf5   (.31.)   38.944    1.980   19.672    0.000   38.944    9.190
>    .emreg1  (.32.)   44.652    0.931   47.950    0.000   44.652   11.650
>    .emreg2  (.33.)   44.591    0.945   47.175    0.000   44.591   12.231
>    .emreg3  (.34.)   44.605    0.914   48.811    0.000   44.605   12.504
>    .emreg4  (.35.)   44.596    0.914   48.766    0.000   44.596   11.716
>    .emreg5  (.36.)   44.588    0.915   48.710    0.000   44.588   12.235
>    .prfctns          -4.736    1.990   -2.380    0.017   -1.401   -1.401
>    .em_rglt          -1.859    0.549   -3.388    0.001   -0.619   -0.619
> 
> Variances:
>                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
>    .perf1             4.954    0.612    8.090    0.000    4.954    0.302
>    .perf2             4.960    0.609    8.150    0.000    4.960    0.295
>    .perf3             5.070    0.759    6.678    0.000    5.070    0.280
>    .perf4             6.571    0.974    6.745    0.000    6.571    0.386
>    .perf5             5.411    0.799    6.774    0.000    5.411    0.301
>    .emreg1            5.659    0.820    6.897    0.000    5.659    0.385
>    .emreg2            3.948    0.505    7.826    0.000    3.948    0.297
>    .emreg3            3.538    0.551    6.418    0.000    3.538    0.278
>    .emreg4            5.344    0.763    7.002    0.000    5.344    0.369
>    .emreg5            3.851    0.644    5.976    0.000    3.851    0.290
>    .perfectionism     4.575    0.642    7.130    0.000    0.401    0.401
>    .em_regulation     7.877    1.122    7.020    0.000    0.872    0.872
anova(fit_em_cons, fit_model_group3)
Df AIC BIC Chisq Chisq diff Df diff Pr(>Chisq)
fit_model_group3 100 14624 14810 91
fit_em_cons 101 14732 14914 201 110 1 0
# sig diff, em variant by gender
em_cons <- fitMeasures(fit_em_cons)[names = c("cfi", "tli")]
round(m3 - em_cons, 3)
>   cfi   tli 
> 0.045 0.053

Plotting

# Create plot data
sem_parameters <-model_parameters(fit_model_group3, standardize = TRUE)
data_plot <- see::data_plot(sem_parameters, ci=FALSE)

# Rename nodes and edges
data_plot$nodes <- mutate(data_plot$nodes,
  Name = str_replace(Name, "perfectionism", "Perfectionism"),
  Name = str_replace(Name, "em_regulation", "Emotional\nRegulation"),
  Name = str_replace(Name, "edscore", "ED\nSymptom\nScore"))
data_plot$edges <- mutate(data_plot$edges,
  from = str_replace(from, "perfectionism", "Perfectionism"),
  from = str_replace(from, "em_regulation", "Emotional\nRegulation"),
  from = str_replace(from, "edscore", "ED\nSymptom\nScore"))
data_plot$edges <- mutate(data_plot$edges,
  to = str_replace(to, "perfectionism", "Perfectionism"),
  to = str_replace(to, "em_regulation", "Emotional\nRegulation"),
  to = str_replace(to, "edscore", "ED\nSymptom\nScore"))

# Separate plot data into male and female
## Male
data_plot_male <- data_plot |> 
  map(~slice(., 1:13))

## Female
data_plot_female <- data_plot |> 
  map(~slice(., c(1:3, 14:n())))
data_plot_female$edges <- data_plot_female$edges |> 
  slice(4:n())
set.seed(333)
# Plot for Male
sem_plot_male <- tidygraph::tbl_graph(data_plot_male$nodes, data_plot_male$edges) |> 
  ggraph::ggraph(layout = 'fr') +
  # Correlation
  ggraph::geom_edge_arc(aes(
                    alpha = as.numeric(Component == "Correlation"),
                    label = Label_Correlation,
                    color = Coefficient),
                    strength = 0.3,
                    label_dodge = unit(4, "mm"),
                    angle_calc = "along", 
                    edge_width = 0.5,
                    label_size = 2.7,
                    linetype = 2,
                    arrow = arrow(type = "closed", length = unit(3, "mm"), ends = "both"),
                    start_cap = ggraph::circle(-12, 'mm'), end_cap = ggraph::circle(-12, 'mm')) +
  # Loading
  ggraph::geom_edge_link(aes(
                     alpha = as.numeric(Component == "Loading"),
                     label = Label_Loading,
                     color = Coefficient),
                     label_dodge = unit(2, "mm"),
                     angle_calc = "along", 
                     edge_width = 0.3,
                     label_size = 2.7,
                     #check_overlap = TRUE,
                     arrow = arrow(type = "closed", length = unit(3, "mm")),
                     start_cap = ggraph::circle(0, 'mm'), end_cap = ggraph::circle(-12, 'mm')) +
  # Regression
  ggraph::geom_edge_link(aes(
                     alpha = as.numeric(Component == "Regression"),
                     label = Label_Regression,
                     color = Coefficient),
                     label_dodge = unit(2, "mm"),
                     angle_calc = "along", 
                     edge_width = 0.9,
                     label_size = 2.7,
                     #check_overlap = TRUE,
                     arrow = arrow(type = "closed", length = unit(3, "mm")),
                     start_cap = ggraph::circle(0, 'mm'), end_cap = ggraph::circle(-12, 'mm')) +
   ggraph::geom_node_point(aes(colour = Name, size = Latent)) +
  ggraph::geom_node_text(aes(label = Name), size = 3)  +
  ggraph::scale_edge_colour_gradient2(
    guide = FALSE,
    high = "#6aa84f",
    mid = "#bcbcbc",
    low = "#f50a0a"
  ) +
  scale_alpha(guide = FALSE, range = c(0, 1)) +
  scale_size_manual(values=c("TRUE"=22, "FALSE"=30)) +
  scale_x_continuous(expand = expansion(c(0.07, 0.07))) +
  scale_y_continuous(expand = expansion(c(0.07, 0.07))) +
  scale_color_manual(values=c(
    "Perfectionism"="#f383a9",
    "perf1"="#f895b7", 
    "perf2"="#f396b5", 
    "perf3"="#f58caf", 
    "perf4"="#f8adc5", 
    "perf5"="#F8BBD0",
                              
    "Emotional\nRegulation"="#FF9800", 
    "emreg1"="#f3b14f", 
    "emreg2"="#fcd397", 
    "emreg3"="#f7bf6d",
    "emreg4"="#FFCC80", 
    "emreg5"="#FFE0B2",
                              
    "ED\nSymptom\nScore"="#a88ade")) +
  ggraph::theme_graph() +
  theme(legend.position = "none") + 
  ggtitle("Final model for Male")
sem_plot_male

#ggsave("figures/sem_plot_male.png", sem_plot_male, height=figheight*1.2, width=figwidth, dpi=600)
# Plot for Female
sem_plot_female <- tidygraph::tbl_graph(data_plot_female$nodes, data_plot_female$edges) |> 
  ggraph::ggraph(layout = 'fr') +
  # Correlation
  ggraph::geom_edge_arc(aes(
                    alpha = as.numeric(Component == "Correlation"),
                    label = Label_Correlation,
                    color = Coefficient),
                    strength = 0.3,
                    label_dodge = unit(4, "mm"),
                    angle_calc = "along", 
                    edge_width = 0.5,
                    label_size = 2.7,
                    linetype = 2,
                    arrow = arrow(type = "closed", length = unit(3, "mm"), ends = "both"),
                    start_cap = ggraph::circle(-12, 'mm'), end_cap = ggraph::circle(-12, 'mm')) +
  # Loading
  ggraph::geom_edge_link(aes(
                     alpha = as.numeric(Component == "Loading"),
                     label = Label_Loading,
                     color = Coefficient),
                     label_dodge = unit(2, "mm"),
                     angle_calc = "along", 
                     edge_width = 0.3,
                     label_size = 2.7,
                     #check_overlap = TRUE,
                     arrow = arrow(type = "closed", length = unit(3, "mm")),
                     start_cap = ggraph::circle(0, 'mm'), end_cap = ggraph::circle(-12, 'mm')) +
  # Regression
  ggraph::geom_edge_link(aes(
                     alpha = as.numeric(Component == "Regression"),
                     label = Label_Regression,
                     color = Coefficient),
                     label_dodge = unit(2, "mm"),
                     angle_calc = "along", 
                     edge_width = 0.9,
                     label_size = 2.7,
                     #check_overlap = TRUE,
                     arrow = arrow(type = "closed", length = unit(3, "mm")),
                     start_cap = ggraph::circle(0, 'mm'), end_cap = ggraph::circle(-12, 'mm')) +
   ggraph::geom_node_point(aes(colour = Name, size = Latent)) +
  ggraph::geom_node_text(aes(label = Name), size = 3)  +
  ggraph::scale_edge_colour_gradient2(
    guide = FALSE,
    high = "#6aa84f",
    mid = "#bcbcbc",
    low = "#f50a0a"
  ) +
  scale_alpha(guide = FALSE, range = c(0, 1)) +
  scale_size_manual(values=c("TRUE"=22, "FALSE"=30)) +
  scale_x_continuous(expand = expansion(c(0.07, 0.07))) +
  scale_y_continuous(expand = expansion(c(0.07, 0.07))) +
  scale_color_manual(values=c(
    "Perfectionism"="#f383a9",
    "perf1"="#f895b7", 
    "perf2"="#f396b5", 
    "perf3"="#f58caf", 
    "perf4"="#f8adc5", 
    "perf5"="#F8BBD0",
                              
    "Emotional\nRegulation"="#FF9800", 
    "emreg1"="#f3b14f", 
    "emreg2"="#fcd397", 
    "emreg3"="#f7bf6d",
    "emreg4"="#FFCC80", 
    "emreg5"="#FFE0B2",
                              
    "ED\nSymptom\nScore"="#a88ade")) +
  ggraph::theme_graph() +
  theme(legend.position = "none") + 
  ggtitle("Final Model for Female")
sem_plot_female

#ggsave("figures/sem_plot_female.png", sem_plot_female, height=figheight*1.2, width=figwidth, dpi=600)